#!/bin/bash
# Rsync服务一键卸载脚本
# 功能: 卸载定时备份和实时同步服务

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 打印彩色欢迎信息
echo -e "${GREEN}"
echo "======================================================"
echo "   Centos7 rsync(远程定时和实时备份同步)一键卸载脚本              "
echo "======================================================"
echo -e "${NC}"
echo -e "${YELLOW}▌清理内容：${NC}"
echo -e "  ${GREEN}➤${NC} 停止并禁用相关服务 (rsyncd/inotify_rsync)"
echo -e "  ${GREEN}➤${NC} 删除配置文件 (/etc/rsyncd.*)"
echo -e "  ${GREEN}➤${NC} 清除定时任务"
echo -e "  ${GREEN}➤${NC} 删除日志文件 (/var/log/rsync_*.log)"
echo -e "  ${GREEN}➤${NC} 卸载相关软件包 (rsync/inotify-tools)"
echo -e "  ${GREEN}➤${NC} 删除systemd服务文件"
echo ""
echo -e "${RED}▌特别注意：${NC}"
echo -e "  ${YELLOW}⚠${NC} 不会自动删除备份目录 (需手动处理)"
echo -e "  ${YELLOW}⚠${NC} 不会卸载EPEL源"
echo -e "  ${YELLOW}⚠${NC} 保留系统原有的rsync依赖"
echo -e "  ${YELLOW}⚠${NC} 需要root权限执行"
echo -e "${BLUE}▌技术支持：${NC}https://gitee.com/cncsrf/rsync-remote-backup"
echo "============================================"
echo ""

# 检查root权限
if [ "$(id -u)" -ne 0 ]; then
    echo -e "${RED}错误：请使用root用户运行此脚本！${NC}" >&2
    exit 1
fi

# 选择卸载模式
echo -e "${YELLOW}请选择卸载模式：${NC}"
echo "1) 服务端（接收端）"
echo "2) 客户端（发送端）"
echo "3) 全部卸载"
read -p "输入数字 (1/2/3): " UNINSTALL_MODE

if [[ ! "$UNINSTALL_MODE" =~ ^[123]$ ]]; then
    echo -e "${RED}错误：请输入1、2或3！${NC}" >&2
    exit 1
fi

# 公共卸载函数
uninstall_common() {
    echo -e "${YELLOW}正在卸载公共组件...${NC}"
    
    # 停止并禁用rsync服务
    if systemctl is-active --quiet rsyncd; then
        systemctl stop rsyncd
        systemctl disable rsyncd
        echo -e "${GREEN}已停止rsyncd服务${NC}"
    fi
    
    # 删除rsync配置文件
    [ -f "/etc/rsyncd.conf" ] && rm -f /etc/rsyncd.conf && echo "已删除 /etc/rsyncd.conf"
    [ -f "/etc/rsyncd.secrets" ] && rm -f /etc/rsyncd.secrets && echo "已删除 /etc/rsyncd.secrets"
    
    # 删除日志文件
    [ -f "/var/log/rsync_backup.log" ] && rm -f /var/log/rsync_backup.log && echo "已删除 /var/log/rsync_backup.log"
    [ -f "/var/log/inotify_rsync.log" ] && rm -f /var/log/inotify_rsync.log && echo "已删除 /var/log/inotify_rsync.log"
    [ -f "/var/log/rsyncd.log" ] && rm -f /var/log/rsyncd.log && echo "已删除 /var/log/rsyncd.log"
    
    # 删除PID文件
    [ -f "/var/run/rsyncd.pid" ] && rm -f /var/run/rsyncd.pid && echo "已删除 /var/run/rsyncd.pid"
}

# 卸载服务端
uninstall_server() {
    echo -e "${RED}正在卸载服务端组件...${NC}"
    
    uninstall_common
    
    # 提示但不删除备份目录
    if [ -d "/opt/data_bak" ]; then
        echo -e "${YELLOW}注意：备份目录 /opt/data_bak 仍然存在，请手动处理${NC}"
    fi
    
    # 卸载rsync软件包（但不卸载依赖）
    if rpm -q rsync &>/dev/null; then
        yum remove -y rsync
        echo -e "${GREEN}已卸载rsync软件包${NC}"
    fi
    
    echo -e "${GREEN}服务端卸载完成！${NC}"
}

# 卸载客户端
uninstall_client() {
    echo -e "${RED}正在卸载客户端组件...${NC}"
    
    uninstall_common
    
    # 停止并删除inotify服务
    if systemctl is-active --quiet inotify_rsync; then
        systemctl stop inotify_rsync
        systemctl disable inotify_rsync
        echo -e "${GREEN}已停止inotify_rsync服务${NC}"
    fi
    
    [ -f "/etc/systemd/system/inotify_rsync.service" ] && rm -f /etc/systemd/system/inotify_rsync.service && echo "已删除 /etc/systemd/system/inotify_rsync.service"
    
    # 删除定时任务
    crontab -l | grep -v "/opt/rsync_backup.sh" | crontab -
    echo -e "${GREEN}已清除相关定时任务${NC}"
    
    # 卸载软件包（但不卸载EPEL）
    if rpm -q inotify-tools &>/dev/null; then
        yum remove -y inotify-tools
        echo -e "${GREEN}已卸载inotify-tools${NC}"
    fi
    
    if rpm -q rsync &>/dev/null; then
        yum remove -y rsync
        echo -e "${GREEN}已卸载rsync${NC}"
    fi
    
    echo -e "${GREEN}客户端卸载完成！${NC}"
}

# 执行卸载
case "$UNINSTALL_MODE" in
    1)
        uninstall_server
        ;;
    2)
        uninstall_client
        ;;
    3)
        uninstall_server
        uninstall_client
        ;;
esac

# 重新加载systemd
systemctl daemon-reload
echo -e "${GREEN}已重新加载systemd${NC}"

echo -e "${GREEN}============================================${NC}"
echo -e "${GREEN}           卸载操作已完成！                  ${NC}"
echo -e "${GREEN}============================================${NC}"